#ifndef BDPLUGINREGISTRY_APP_H
#define BDPLUGINREGISTRY_APP_H

//Includes Qt
#include <QMap>


//class Qt
class QString;

//class interne
class BdPlugin;
class BdPluginMetadata;

/**
Class qui sert de registre pour les plugins
@author beltegeuse
*/
class BdPluginRegistry
{
  public:
    /**
    Methode pour acceder aux fonctionnalité de la classe
    @return index des plugins
    */
    static BdPluginRegistry* instance();
    
    /**
    pour ajouter un plugin dans le registre
    @param nom nom du plugin
    @param library chemin du plugin
    @param plugin
    */
    void addPlugin(QString nom, QString library, BdPlugin* plugin);
    
    /**
    Pour enlever le plugin de ce nom
    @param nom nom du plugin a enlever
    */
    void removePlugin(QString nom);
        
    /**
    Renvoi le plugin de ce nom
    @param nom nom du plugin a renvoyer
    @return adresse memoire de ce plugin
    */
    BdPlugin* plugin(QString nom);
    
    /**
    Renvoie la path du plugin
    @param pluginKey
    @return path
    */
    QString path(QString pluginKey);
  private:
    /**
    Constructeur
    */
    BdPluginRegistry();
    /**
    Protection pour creer qu'un seul et unique registre
    */
    static BdPluginRegistry* mInstance;
    
    /**
    Map qui stocke le plugin enregistrr
    */
    QMap<QString,BdPluginMetadata*> plugins;
};

#endif
